﻿using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.IO;
using System.Collections.Generic;

public partial class Admin_ColumnMaintain : System.Web.UI.Page
{
	private ColumnComponent clsColumnComp;
	private string strRootDir;		// 网站跟路径

	protected void Page_Load(object sender, EventArgs e)
	{
		clsColumnComp = new ColumnComponent();

		if (!IsPostBack)
		{
			//strRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());
			strRootDir = Server.MapPath("./");
			ViewState["Status"] = "All";

			BindGridView(GrvColumn);		// 显示所有栏目

			BindDropDownListColumns(DdlAddFatherUserGroup, "无");		// 绑定添加模块中上级栏目下来列表

			BindDropDownListFiles(DdlAddFile);	// 添加模版中，绑定链接地址下拉列表

			BindDropDownListColumns(DdlModifyFather, "无");		// 绑定修改模式上级栏目下来列表
			BindDropDownListFiles(DdlModifyLink);		// 绑定修改模式文件列表

			BindDropDownListColumns(DdlFatherColumnQuery, "无");		// 绑定查询上级栏目下来列表

			BindDropDownListType(DdlTypeAdd);
			BindDropDownListType(DdlTypeModify);
		}

	}

	#region 控件绑定函数
	
	/// <summary>
	/// <para>功能描述：	把查询所有栏目把结果绑定到GridView控件</para>
	/// <para>输入参数：	GridView dv	GridView控件ID</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	private</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-06</para>
	/// <para>备注：	</para>
	/// </summary>
	private void BindGridView(GridView dv)
	{
		if (ViewState["Status"].ToString() != "Query")
		{
			dv.DataSource = clsColumnComp.QueryAllOrderGrade("--");
		}
		else
		{
			dv.DataSource = clsColumnComp.QueryByFatherID(Convert.ToInt32(ViewState["QueryFatherColumnID"]));
		}
		dv.DataKeyNames = new string[] {"ID"};
		dv.DataBind();
	}

	/// <summary>
	/// <para>功能描述：	查询所有栏目，并绑定到DropDownList控件，并有一个空项，用来没有上级栏目情况使用</para>
	/// <para>输入参数：	DropDownList ddl		绑定的控件</para>
	/// <para>		string strNoFatherColumnName	空项显示的名字</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-06</para>
	/// <para>备注：	</para>
	/// </summary>
	private void BindDropDownListColumns(DropDownList ddl, string strNoFatherColumnName)
	{
		ListItem listItem;

		listItem = new ListItem();
		listItem.Text = strNoFatherColumnName;
		listItem.Value = clsColumnComp.clsData.clsConfig.nNoFather.ToString();

		ddl.DataSource = clsColumnComp.QueryAllOrderGrade("--");
		ddl.DataTextField = "Name";
		ddl.DataValueField = "ID";
		ddl.DataBind();

		ddl.Items.Insert(0, listItem);
	}

	/// <summary>
	/// <para>功能描述：	用下来列表显示当前网站所有.aspx网页</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-06</para>
	/// <para>备注：	</para>
	/// </summary>
	private void BindDropDownListFiles(DropDownList ddl)
	{
		DirectoryInfo file1;
		string strPath;

		//strPath = Server.MapPath("../");
		strPath = strRootDir;

		file1 = new DirectoryInfo(strPath);

		FileInfo[] subFile = file1.GetFiles();

		foreach (FileInfo file in subFile)
		{
			if (file.Extension == ".aspx")
			{
				ListItem item = new ListItem(file.Name, file.Name);
				ddl.Items.Add(item);
			}
		}

		GetChildDirectory(file1, ddl);

		ddl.Items.Insert(0, new ListItem("无", ""));
	}

	/// <summary>
	/// <para>功能描述：	查询当前路径下所有文件，并添加到下来列表中</para>
	/// <para>输入参数：	DirectoryInfo theDir		当前路径</para>
	/// <para>		DropDownList ddl		下拉列表</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	private</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-06</para>
	/// <para>备注：	</para>
	/// </summary>
	private void GetChildDirectory(DirectoryInfo theDir, DropDownList ddl)
	{
		DirectoryInfo[] subDirectories = theDir.GetDirectories();//获得目录
		
		foreach (DirectoryInfo dirinfo in subDirectories)
		{
			FileInfo[] subFile = dirinfo.GetFiles();

			foreach(FileInfo file in subFile)
			{
				if (file.Extension == ".aspx")
				{
					ListItem item = new ListItem(CommonFunction.urlconvertor(file.FullName, strRootDir), CommonFunction.urlconvertor(file.FullName, strRootDir));
					//ListItem item = new ListItem(file.FullName, file.Name);
					ddl.Items.Add(item);
				}
			}

			GetChildDirectory(dirinfo, ddl);
		}
	}

	/// <summary>
	/// <para>功能描述：	绑定所有控件</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	private void BindControl()
	{
		BindGridView(GrvColumn);

		BindDropDownListColumns(DdlAddFatherUserGroup, "无");		// 绑定添加模块中上级栏目下来列表

		//BindDropDownListFiles(DdlAddFile);	// 添加模版中，绑定链接地址下拉列表
		BindDropDownListColumns(DdlModifyFather, "无");		// 绑定修改模式上级栏目下来列表
		//BindDropDownListFiles(DdlModifyLink);		// 绑定修改模式文件列表

		BindDropDownListColumns(DdlFatherColumnQuery, "无");		// 绑定查询上级栏目下来列表
	}

	/// <summary>
	/// <para>功能描述：	绑定栏目类型下来列表</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-09</para>
	/// <para>备注：	</para>
	/// </summary>
	private void BindDropDownListType(DropDownList ddl)
	{
		ListItem listItemWeb;
		ListItem listItemAdmin;
		listItemWeb = new ListItem();
		listItemAdmin = new ListItem();

		listItemWeb.Value = clsColumnComp.clsData.clsConfig.nWebColumn.ToString();
		listItemWeb.Text = clsColumnComp.clsData.clsConfig.strArrColumnType[Convert.ToInt32(listItemWeb.Value)];
		listItemAdmin.Value = clsColumnComp.clsData.clsConfig.nAdminColumn.ToString();
		listItemAdmin.Text = clsColumnComp.clsData.clsConfig.strArrColumnType[Convert.ToInt32(listItemAdmin.Value)];
		ddl.Items.Add(listItemWeb);
		ddl.Items.Add(listItemAdmin);
	}

	#endregion

	#region GridView事件相应函数

	protected void GrvColumn_OnSelectedIndexChanging(object sender, GridViewSelectEventArgs e)
	{
		int nModifyColumnID;
		GridView dv;
		Column clsModifyColumn;

		dv = (GridView)sender;

		nModifyColumnID = Convert.ToInt32(dv.DataKeys[e.NewSelectedIndex].Value);
		ViewState["ModifyColumnID"] = nModifyColumnID;

		clsModifyColumn = clsColumnComp.GetOneByID(nModifyColumnID);

		TxtModifyName.Text = clsModifyColumn.Name;
		DdlModifyFather.Text = clsModifyColumn.FatherID.ToString();
		DdlModifyLink.Text = clsModifyColumn.Link;
		TxtModifyOrder.Text = clsModifyColumn.Order.ToString();
		DdlTypeModify.Text = clsModifyColumn.Type.ToString();

		MultiViewViews.SetActiveView(ShowModify);

	}

	protected void GrvColumn_OnRowDeleting(object sender, GridViewDeleteEventArgs e)
	{
		int nDeleteColumnID;		// 要删除栏目的ID
		GridView dv;
		Column clsDeleteColumn;		// 要删除的栏目对象

		clsDeleteColumn = new Column();
		dv = (GridView)sender;
		nDeleteColumnID = Convert.ToInt32(dv.DataKeys[e.RowIndex].Value);
		clsDeleteColumn.ID = nDeleteColumnID;
		clsColumnComp.Delete(clsDeleteColumn);

		BindControl();
	}

	protected void GrvColumn_OnDataBound(object sender, EventArgs e)
	{
		GridView dv;

		dv = (GridView)sender;
		LabNowPage.Text = (dv.PageIndex + 1).ToString();
		LabTotalPage.Text = dv.PageCount.ToString();

		if (dv.PageIndex == 0)
		{
			BtnFirst.Enabled = false;
			BtnPrev.Enabled = false;
		}
		else
		{
			BtnFirst.Enabled = true;
			BtnPrev.Enabled = true;
		}

		if (dv.PageIndex == dv.PageCount - 1)
		{
			BtnNext.Enabled = false;
			BtnLast.Enabled = false;
		}
		else
		{
			BtnNext.Enabled = true;
			BtnLast.Enabled = true;
		}
	}

	#endregion

	#region 按钮按下相应事件

	/// <summary>
	/// <para>功能描述：	把视图转到添加视图</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-06</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnToAdd_OnClick(object sender, EventArgs e)
	{
		MultiViewViews.SetActiveView(ShowAdd);		// 转到添加视图
	}

	/// <summary>
	/// <para>功能描述：	添加栏目到数据库</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnAdd_OnClick(object sender, EventArgs e)
	{
		string strName;		// 栏目名称
		int nFatherID;		// 上级栏目ID
		string strLink;		// 栏目地址
		int nOrder;		// 栏目顺序
		Column clsAddColumn;	// 添加栏目对象
		int nType;		// 栏目类别

		clsAddColumn = new Column();
		strName = TxtAddName.Text;
		nFatherID = Convert.ToInt32(DdlAddFatherUserGroup.SelectedValue);
		strLink = DdlAddFile.SelectedValue;
		nOrder = Convert.ToInt32(TxtAddOrder.Text);
		nType = Convert.ToInt32(DdlTypeAdd.SelectedValue);

		clsAddColumn.Name = strName;
		clsAddColumn.FatherID = nFatherID;
		clsAddColumn.Link = strLink;
		clsAddColumn.Order = nOrder;
		clsAddColumn.Type = nType;

		clsColumnComp.Add(clsAddColumn);

		MultiViewViews.SetActiveView(Show);

		BindControl();
	}

	/// <summary>
	/// <para>功能描述：	删除多个记录</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnMultiDelete_OnClick(object sender, EventArgs e)
	{
		GridView dv;
		Column clsColumn;

		dv = GrvColumn;
		clsColumn = new Column();

		for (int i = 0; i < dv.Rows.Count; i++)
		{
			CheckBox Chk = (CheckBox)dv.Rows[i].FindControl("CheckBoxMultiSelect");
			if (Chk.Checked == true)
			{
				clsColumn.ID = Convert.ToInt32(dv.DataKeys[i].Value);
				clsColumnComp.Delete(clsColumn);
			}
		}

		BindControl();
	}

	/// <summary>
	/// <para>功能描述：	修改一个栏目</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-02</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnModify_OnClick(object sender, EventArgs e)
	{
		Column clsModifyColumn;

		clsModifyColumn = new Column();

		clsModifyColumn.ID = Convert.ToInt32(ViewState["ModifyColumnID"]);
		clsModifyColumn.Name = TxtModifyName.Text;
		clsModifyColumn.FatherID = Convert.ToInt32(DdlModifyFather.Text);
		clsModifyColumn.Link = DdlModifyLink.Text;
		clsModifyColumn.Order = Convert.ToInt32(TxtModifyOrder.Text);
		clsModifyColumn.Type = Convert.ToInt32(DdlTypeModify.Text);

		clsColumnComp.Modify(clsModifyColumn);

		MultiViewViews.SetActiveView(Show);
		BindControl();
	}

	/// <summary>
	/// <para>功能描述：	根据上级栏目查询</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnQuery_OnClick(object sender, EventArgs e)
	{
		ViewState["QueryFatherColumnID"] = DdlFatherColumnQuery.Text;
		ViewState["Status"] = "Query";
		BindGridView(GrvColumn);
	}

	/// <summary>
	/// <para>功能描述：	查询全部</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnQueryAll_OnClick(object sender, EventArgs e)
	{
		ViewState["Status"] = "All";
		BindGridView(GrvColumn);
	}

	#endregion

	#region 分页控制按钮
	/// <summary>
	/// <para>功能描述：	下一页</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnNext_OnClick(object sender, EventArgs e)
	{
		if (GrvColumn.PageIndex != GrvColumn.PageCount - 1)
		{
			GrvColumn.PageIndex = GrvColumn.PageIndex + 1;
		}
		BindGridView(GrvColumn);
	}

	/// <summary>
	/// <para>功能描述：	第一页</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnFirst_OnClick(object sender, EventArgs e)
	{
		GrvColumn.PageIndex = 0;
		BindGridView(GrvColumn);
	}

	/// <summary>
	/// <para>功能描述：	上一页</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnPrev_OnClick(object sender, EventArgs e)
	{
		if (GrvColumn.PageIndex != 0)
		{
			GrvColumn.PageIndex = GrvColumn.PageIndex - 1;
		}
		BindGridView(GrvColumn);
	}

	/// <summary>
	/// <para>功能描述：	最后一页</para>
	/// <para>输入参数：	</para>
	/// <para>返回值：	</para>
	/// <para>方法范围：	protected</para>
	/// <para>作者：	Tony Mucor</para>
	/// <para>日期：	2013-08-07</para>
	/// <para>备注：	</para>
	/// </summary>
	protected void BtnLast_OnClick(object sender, EventArgs e)
	{
		GrvColumn.PageIndex = GrvColumn.PageCount;
		BindGridView(GrvColumn);
	}
	#endregion

}
